package util;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class POIUtil {
	
	public static void buildStandardScale(String path) {
		Connection con = null;
		PreparedStatement pStatement = null;
		Statement stmt = null;
		ResultSet rs = null;
		ArrayList<ArrayList<Object>> ans;
		String sql = "insert into study(id,name,sex,class,major,faculty) values(?,?,?,?,?,?)";
		try {
			con = JDBCUtil.getConnection();
			con.setAutoCommit(false);
			ans = new ArrayList<ArrayList<Object>>();
			ans = TxtUtil.readFile(path);
		//	ans = TxtUtil.readFile("C:\\Users\\你们走啊\\Desktop\\study\\学生名单.txt");
			stmt = con.createStatement();
			pStatement = con.prepareStatement(sql);
			for(int i = 1; i < ans.size(); i++) {
				String id = ans.get(i).get(0).toString();
				String newSql = "select * from study where id = "+id;
				rs = stmt.executeQuery(newSql);
				String c = "0";
				while (rs.next()) {
					c = rs.getString(1); 
				} 
				if(c.equals("0")) {
					for(int j = 1; j <= ans.get(i).size(); j++) {
						pStatement.setString(j, ans.get(i).get(j-1).toString());
					}
					pStatement.addBatch();
					pStatement.executeBatch();
					con.commit();
				}
			}
		}catch (SQLException sqle) {
				sqle.printStackTrace();
		}catch(Exception e){
				e.printStackTrace();
		}finally{
				JDBCUtil.realeaseAll(rs, stmt, con, pStatement);
		}
	}
	
	public static void mergeExcel(String path) {
		Connection con = null;
		PreparedStatement pStatement = null;
		Statement stmt = null;
		ResultSet rs = null;
		ArrayList<ArrayList<Object>> ans;
		ArrayList<Object> cowList;
		ArrayList<ArrayList<Object>> errorAns = new ArrayList<ArrayList<Object>>();
		ArrayList<Object> temp = new ArrayList<Object>();
		temp.add("学号");
		temp.add("姓名");
		temp.add("该信息所在的文件夹");
		errorAns.add(temp);
		String sql = "insert into study(id,name,sex,class,major,faculty) values(?,?,?,?,?,?)";
		try {
			con = JDBCUtil.getConnection();
			con.setAutoCommit(false);
			stmt = con.createStatement();
		//	String Path = "C:\\Users\\你们走啊\\Desktop\\新建文件夹";
			File file = new File(path);
			File[] tempList = file.listFiles();
			String tempNameList [] = new String [tempList.length];
			for(int i = 0; i < tempList.length; i++) {
				if (tempList[i].isFile()) {
					tempNameList[i] = tempList[i].toString();
				}
			}
			int begin = 0, index = 0;
			ArrayList<ArrayList<Object>> result;
			for(int l = 0; l < tempNameList.length; l++) {
				begin = 0;
				index = 0;
				if(tempNameList[l].contains("txt")) {
					continue;
				}
				if(tempNameList[l].contains("错误")) {
					continue;
				}
				if(tempNameList[l].contains("网络汇总")) {
					continue;
				}
				String name;
				File newFile = new File(tempNameList[l]);
				if(newFile.getName().contains("期中")) {
					name = "midterm";
				}else if(newFile.getName().contains("期末")) {
					name = "terminal";
				}else if(newFile.getName().contains("语言程序设计")) {
					name = "MOOC";
				}else {
					name = "pta";
				}
				result = ExcelUtil.readExcel(newFile);
				for(int i = 0 ;i < result.size() ;i++){
					for(int j = 0;j<result.get(i).size(); j++){
						if(result.get(i).get(j).toString().equals("学号")) begin = i+1;
						if(result.get(i).get(j).toString().contains("总分")) {
							index = j;
							break;
						}
					}
				}
				boolean flag;
				for(int i = begin; i < result.size(); i++) {
					temp = new ArrayList<Object>();
					String id = result.get(i).get(0).toString();
					flag = false;
					if(result.get(i).get(0)==null||result.get(i).get(0).toString().equals("")||result.get(i).get(1)==null||result.get(i).get(1).toString().equals("")) {
						flag = false;
					}
					else {
						String newSql2 = "select * from study where id = "+result.get(i).get(0)+" and name = '"+result.get(i).get(1)+"'";
						rs = stmt.executeQuery(newSql2);
						while(rs.next()) {
							flag = true;
						}
					}
					if(!flag) {
						temp.add(result.get(i).get(0));
						temp.add(result.get(i).get(1));
						temp.add(tempNameList[l]);
						errorAns.add(temp);
					}
					String newSql = "update study set "+name+" = (?) where id = "+id;
				//	String newSql = "update study set "+name.toString()+" = "+result.get(i).get(index).toString()+" where id = "+id;
					if(NumberUtil.isNumber(id)){
						pStatement = con.prepareStatement(newSql);
						pStatement.setString(1, result.get(i).get(index).toString());
						pStatement.addBatch();
						pStatement.executeBatch();
						con.commit();
					}
				}
			}
			
			//将合并excel文件写入新的excel
			ans = new ArrayList<ArrayList<Object>>();
			sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name = 'study'";
			rs = stmt.executeQuery(sql);
			cowList = new ArrayList<Object>();
			while(rs.next()) {
				cowList.add(rs.getString(1));
			}
			ans.add(cowList);
			rs.close();
			String newSql="select * from study";
			rs = stmt.executeQuery(newSql);
			while(rs.next()) {
				cowList = new ArrayList<Object>();
				for(int i = 1; i <= 11; i++)
					if(rs.getString(i)==null) {
						cowList.add("");
					}
					else cowList.add(rs.getString(i));
				ans.add(cowList);
			}
			ExcelUtil.writeExcel(ans, path+"/java网络汇总.xlsx");
			ExcelUtil.writeExcel(errorAns, path+"/错误汇总表.xlsx");
		}catch (SQLException sqle) {
			sqle.printStackTrace();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			JDBCUtil.realeaseAll(rs, stmt, con, pStatement);
		}
	}
	
	/*public static void main(String[] args) {
		buildStandardScale("C:\\Users\\你们走啊\\Desktop\\study\\学生名单.txt");
		mergeExcel("E:/abc");
	}*/
}
